<?php

namespace App\Admin\Http\Controllers\Web;

use App\Extensions\Pagination\BootstrapThreePresenter;
use Flash;
use App\Admin\Eloquent\Information;
use App\Admin\Http\Requests\InformationRequest;
use App\Admin\Http\Controllers\Controller;
use Illuminate\Http\Request;

class InformationsController extends Controller
{
  /**
   * 信息模板列表
   *
   *  @param Request $request
   *  @return \Illuminate\Http\Response
   */
  public function index(Request $request)
  {
    //获取 请求中的 条件参数
    //模板类型 位置 模板标题  是否启用
    $arr = $request->only('in_type', 'in_position', 'in_title', 'in_state');

    $informations = Information::paginateByQuery($arr,15);

    //判断参数 追加分页查询条件
    if(!empty($arr))
      $informations->appends($arr);

    //动态获取数据库字典表
    // 模板类型  模板位置
    $types = Information::getTypes();
    $positions = Information::getPositions();
    // 分页
    $links = (new BootstrapThreePresenter($informations))->render();
    return view('admin.web.information_template.index', compact('types', 'positions', 'informations', 'arr', 'links'));
  }


  /**
   * 新增信息模板表单
   *
   * @return \Illuminate\Http\Response
   */
  public function create()
  {
    //动态获取数据库字典表
    // 模板类型  模板位置
    $types = Information::getTypes();
    $positions = Information::getPositions();

    return view('admin.web.information_template.create', compact('types', 'positions'));
  }

  /**
   * 新增信息模板表单
   *
   * InformationRequests $request
   * @return \Illuminate\Http\RedirectResponse
   */
  public function store(InformationRequest $request)
  {
    $arr =  $request->input();
    $infor = new Information($arr);

    //如果为启用 修改 同类型 同位置 的其他模板 为禁用
    if($arr['state']){
      Information::where('type', $arr['type'])->where('position', $arr['position'])->update(['state' => 0]);
    }

    if ($infor->save()){
      Flash::success('新增信息模板记录成功');

      return $this->redirectAction('Web\InformationsController@index');
    }else{
      Information::where('type', $arr['type'])->where('position', $arr['position'])->update(['state' => 1]);

      Flash::error('新增信息模板记录失败');

      return $this->redirectAction('Web\InformationsController@index');

    }

  }

  /**
   * 根据id删除信息模板
   *
   * @param int $id
   * @return \Illuminate\Http\Response
   */
  public function destroy($id)
  {
    $information = Information::findOrFail($id);

    $information->delete();

    Flash::success('删除信息模板成功');

    return $this->redirectAction('Web\InformationsController@index');
  }

  /**
   * 编辑信息模板表单
   *
   * @param int $id
   * @return \Illuminate\Http\Response
   */
  public function edit(int $id)
  {
    $information = Information::findOrFail($id);

    //动态获取数据库字典表
    // 模板类型  模板位置
    $types = Information::getTypes();
    $positions = Information::getPositions();

    return view('admin.web.information_template.edit', compact('types', 'positions', 'information'));
  }

  /**
   * 修改模板信息表单
   *
   * @param InformationRequest $request
   * @param int $id
   * @return \Illuminate\Http\Response
   * @throws BusinessException
   */
  public function update(InformationRequest $request,int $id)
  {
    $arr = $request->input();
    $information = Information::findOrFail($id);

    //如果为启用 修改 同类型 同位置 的其他模板 为禁用
    if($arr['state']){
      Information::where('type', $arr['type'])->whereNotIn('id',[$id])->where('position', $arr['position'])->update(['state' => 0]);
    }

    if ($information->update($arr)){
      Flash::success('修改信息模板成功');

      return $this->redirectAction('Web\InformationsController@index');
    }
    else{
      Information::where('type', $arr['type'])->where('position', $arr['position'])->update(['state' => 1]);

      Flash::error('修改信息模板失败');

      return $this->redirectAction('Web\InformationsController@index');
    }
  }

  /**
   * 根据id查看信息模板
   *
   * @param int $id
   * @return \Illuminate\Http\Response
   */
  public function show(int $id)
  {
    $information = Information::findOrFail($id);

    return view('admin.web.information_template.show', compact('information'));
  }

}